package com.iotcomm.client;

import javafx.application.Application;
import javafx.application.Platform;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 客户端主应用程序
 */
public class ClientApp extends Application {
    private static final Logger logger = LoggerFactory.getLogger(ClientApp.class);
    private ClientController controller;
    
    @Override
    public void start(Stage primaryStage) throws Exception {
        try {
            // 加载FXML文件
            FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/ClientScene.fxml"));
            Parent root = loader.load();
            controller = loader.getController();
            
            // 设置场景
            Scene scene = new Scene(root, 1600, 900);
            
            // 设置主舞台
            primaryStage.setTitle("即时通讯客户端");
            primaryStage.setScene(scene);
            primaryStage.setMinWidth(1000);
            primaryStage.setMinHeight(600);
            
            // 设置关闭事件处理
            primaryStage.setOnCloseRequest(this::handleCloseRequest);
            
            primaryStage.show();
            
            logger.info("客户端应用程序启动成功");
            
        } catch (Exception e) {
            logger.error("启动客户端应用程序失败", e);
            throw e;
        }
    }
    
    /**
     * 处理窗口关闭请求
     */
    private void handleCloseRequest(WindowEvent event) {
        logger.info("正在关闭客户端应用程序...");
        
        // 执行清理工作
        if (controller != null) {
            controller.shutdown();
        }
        
        // 退出应用程序
        Platform.exit();
        System.exit(0);
    }
    
    /**
     * 主方法
     */
    public static void main(String[] args) {
        // 设置系统属性以支持中文
        System.setProperty("file.encoding", "UTF-8");
        
        logger.info("启动即时通讯客户端应用程序...");
        launch(args);
    }
}